from launch import LaunchDescription
from launch_ros.actions import Node
from launch_ros.parameter_descriptions import ParameterValue
#封装终端指令相关类--------------
#from launch.actions import ExecuteProcess
#from launch.substitutions import FindExecutable
#参数声明与获取-----------------
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch.substitutions import Command
#文件包含相关-------------------
#from launch.actions import IncludeLaunchDescription
#from launch.launch_description_sources import PythonLaunchDescriptionSource
#分组相关----------------------
#from launch_ros.actions import PushRosNamespace
#from launch.actions import GroupAction
#事件相关----------------------
#from launch.event_handlers import OnProcessStart,OnProcessExit
#from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo
#获取功能包下share目录路径-------
from ament_index_python.packages import get_package_share_directory

def generate_launch_description():
    urdf_tutorial_path=get_package_share_directory("fishbot_description")
    default_model_path=urdf_tutorial_path+"/urdf/fishbot/fishbot.urdf.xacro"
    action_declare_arg_mode_path=DeclareLaunchArgument(
        name="model",default_value=str(default_model_path),
        description="URDF的绝对路径")
    robot_description=ParameterValue(
        Command(["xacro ",LaunchConfiguration("model")]),
        value_type=str)
    robot_state_publisher_node=Node(
        package="robot_state_publisher",
        executable="robot_state_publisher",
        parameters=[{"robot_description":robot_description}]
    )
    joint_state_publisher_node=Node(
        package="joint_state_publisher",
        executable="joint_state_publisher"  
    )
    rviz_node=Node(
        package="rviz2",
        executable="rviz2",
        arguments=["-d",get_package_share_directory("fishbot_description")+"/rviz/urdf.rviz"]
    )
    return LaunchDescription([
        action_declare_arg_mode_path,
        robot_state_publisher_node,
        joint_state_publisher_node,
        rviz_node
        ])